package com.pap.rbac.agent.resource;

import java.util.List;

import com.pap.base.service.IPapBaseService;
import com.pap.obj.vo.response.ResponseVO;
import com.pap.rbac.agent.resource.dto.ResourceTreeNodeVO;
import com.pap.rbac.resource.auto.entity.Resource;

public interface IResourceAgent extends IPapBaseService<Resource>{

	/**
	 * 资源菜单树形结构，根据 license 获取
	 * @param clientLicenseId
	 * @param globalParentId 全局统一的默认顶层组织架构的编码为 -1
	 */
	List<ResourceTreeNodeVO> resourceTreeJson(String clientLicenseId, String globalParentId);
	
	/**
	 * 检查当前操作的资源菜单编码，对照新维护的上级资源菜单依赖，是否被循环依赖
	 * @param operaResourceId
	 * @param newParentResourceId
	 * @return
	 */
	Boolean checkTreeCircularDependency(String operaResourceId, String newParentResourceId);
	
	
	/**
	 * 资源菜单更新操作,参数校验并且进行数据维护	pathIds pathCodes pathNames 三个字段的数据维护
	 * @return
	 */
	ResponseVO<Resource> updateAndCheckResource(Resource inputResource, String loginUserId);
	
	
	/**
	 * 维护当前资源菜单节点下，包含的子集的资源菜单的数据值,冗余字段的维护，
	 * pathIds pathCodes pathNames
	 * 请确保当前操作的 inputResourceId，对应的实体数据已经是最新的。 
	 * 
	 * 递归调用，维护完毕所有子类的path冗余字段
	 * @param inputResourceId
	 * @return
	 */
	ResponseVO<Resource> updateRecursionPathColumnResource(String inputResourceId);
	
	/**
	 * 查询当前登录下的所有资源集合
	 * @param userId	登录用户的主键编码
	 * @param clientLicenseId	全局统一的默认顶层组织架构的编码为 -1
	 * @return
	 */
	List<Resource> selectListByUserAndLicense(String userId, String clientLicenseId);
}
